package com.unifiedsearch.utils.utils;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTUtils
{
    /*
    *   jwt 有三部分组成：A.B.C

        A：Header，{"type":"JWT","alg":"HS256"} 固定

        B：playload，存放信息，比如，用户id，过期时间等等，可以被解密，不能存放敏感信息

        C:  签证，A和B加上秘钥 加密而成，只要秘钥不丢失，可以认为是安全的。

        jwt 验证，主要就是验证C部分 是否合法。
    * */
    private static final String jwtToken = "hospital!@#$$";

    public static String createToken(String userId) {
        /*B部分*/
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", userId);

        /*使用JWT构建builder对象*/
        JwtBuilder jwtBuilder = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法，秘钥为jwtToken
                .setClaims(claims) // body数据，要唯一，自行设置
                .setIssuedAt(new Date()) // 设置签发时间
                .setExpiration(new Date(System.currentTimeMillis() + 7 * 24 * 60 * 60 * 60 * 1000));// 7天的有效时间
        String token = jwtBuilder.compact();
        return token;
    }

    public static Map<String, Object> checkToken(String token)
    {
        try {
            Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);
            return (Map<String, Object>) parse.getBody();//返回B部分
        } catch (Exception e) {
           return null;
        }
    }
}
